package com.sjz.DataAsyncLoad;

import java.io.File;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.widget.ListView;

import com.sjz.DataAsyncLoad.adapter.ContactAdapter;
import com.sjz.DataAsyncLoad.domain.Contact;
import com.sjz.DataAsyncLoad.service.ContactService;


/***
 * 启动的时候 开启一条线程 查询数据 
 * 查询出来的数据发送sendMessage然后在主线程用handler辣接收消息然后setAdapter来进行处理
 *
 */
public class DataAsyncLoadActivity extends Activity {
	ListView listView;
	File cache; //缓存文件 

	Handler handler = new Handler() { //handler对象可以得到多线程发送的消息对象
		public void handleMessage(Message msg) { //主线程处理 
			//设置数据 
			//(List<Contact>) msg.obj 这个是多线程发过来的消息信息的值
			listView.setAdapter(new ContactAdapter(DataAsyncLoadActivity.this,
					(List<Contact>) msg.obj, R.layout.listview_item, cache));
		}
	};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
         //得到主页的列表对象
		listView = (ListView) this.findViewById(R.id.listView);

		//创建缓存目录   Environment.getExternalStorageDirectory()读取文件的根目录  cache文件夹
		cache = new File(Environment.getExternalStorageDirectory(), "cache");
		if (!cache.exists())
			cache.mkdirs();

		//在多线程中完成数据加载 
		new Thread(new Runnable() {
			public void run() {
				try {
					List<Contact> data = ContactService.getContacts();  //查询数据
					handler.sendMessage(handler.obtainMessage(22, data)); //发送消息对象给主线程 22 没有意义 随便写的
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}).start();
	}
 
	/***
	 * 缓存的数据清楚 
	 */
	@Override
	protected void onDestroy() {
		for (File file : cache.listFiles()) {
			file.delete();
		}
		cache.delete();
		super.onDestroy();
	}

}